package designPatterns.P01_单例模式_Singleton.P01_饿汉式_不推荐;

/**
 * @author d11yu
 */
public class P01 {
    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance1 == instance2);
        System.out.println("instance1: " + instance1.hashCode());
        System.out.println("instance2: " + instance2.hashCode());
    }
}

/**
 * 优缺点说明：
 * 1)	优点：这种写法比较简单，就是在类装载的时候就完成实例化。避免了线程同步问题。
 * 2)	缺点：在类装载的时候就完成实例化，没有达到Lazy Loading的效果。如果从始
 * 至终从未使用过这个实例，则会造成内存的浪费
 *
 * 3)	这种方式基于classloder机制避免了多线程的同步问题，不过，instance在类装载时就实例化，在单例模式中大多数都是调用getInstance方法， 但是导致类装载的原因有很多种，因此不能确定有其他的方式（或者其他的静态方法）导致类装载，这时候初始化instance就没有达到lazy loading的效果
 * 4)	结论：这种单例模式可用，可能造成内存浪费
 */
class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    
    private Singleton() {

    }
    
    public static Singleton getInstance() {
        return INSTANCE;
    }
}